package com.leigq.www.jwt.enums;

import lombok.Getter;

/**
 * 各种正则表达式
 * 这里使用的枚举来保存,目的是为了整个项目统一使用(强制)这里正则表达式,
 * 这样可以达到表达式的复用和统一,如果发现缺少可以在这里添加.
 * <p>
 * 创建人：leigq <br>
 * 创建时间：2018-11-24 15:06 <br>
 * 枚举使用参考:
 * <ul>
 * <li>
 * <a href='https://www.cnblogs.com/hyl8218/p/5088287.html'>深入理解Java枚举类型(enum)</a>
 * </li>
 * <li>
 * <a href='https://www.cnblogs.com/hyl8218/p/5088287.html'>java enum(枚举)使用详解 + 总结</a>
 * </li>
 * </ul>
 */
public enum RegexEnum {

    /**
     * 验证手机
     */
    PHONE("^1(3|4|5|7|8)\\d{9}$"),

    /**
     * 验证邮箱
     */
    EMAIL("^\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}$"),

    /**
     * 判断字符串是否为纯数字
     */
    ALL_NUMBER("^[0-9]*$"),

    /**
     * 6-20个字母、数字、下划线或减号，以字母开头（适用于用户名、密码）
     */
    SIX_TO_TWENTY("^[a-zA-Z][a-zA-Z0-9_-]{5,19}$"),

    /**
     * 身份证号码(15位),很少会使用到
     */
    @Deprecated
    FIFTEEN_IDCARD("^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$"),

    /**
     * 身份证号码(18位)
     */
    EIGHTEEN_IDCARD("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$"),

    /**
     * 2-4位中文汉字(真实姓名)
     */
    TWO2FOUR_CHINESE("^[\\u4e00-\\u9fa5]{2,4}$"),


    /**
     * 校验日期格式为yyyy-MM-dd HH:mm:ss的正则表达式
     */
    DATE_TIME_FORMAT("^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[13579][26])00))-02-29))\\\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"),

    /**
     * 校验日期格式为yyyy-MM-dd的正则表达式
     */
    DATE_FORMAT("^(\\d{4})-(0\\d{1}|1[0-2])-(0\\d{1}|[12]\\d{1}|3[01])$"),

    ;

    @Getter
    private final String s;

    RegexEnum(String s) {
        this.s = s;
    }

    @Override
    public String toString() {
        return s;
    }

}
